package com.zy.ems.common.base;

import java.io.Serializable;
import java.util.List;

import org.springframework.dao.DataAccessException;

/**
 * 映射器接口。
 * 
 * @author Luffy
 *
 * @param <E>
 * @param <PK>
 */
public interface BaseMapper<E extends BaseEntity, PK extends Serializable> {

    /**
     * 根据主键查询数据。
     * 
     * @param id
     * @return
     * @throws DataAccessException
     */
    E getById(PK id) throws DataAccessException;

    /**
     * 根据主键删除数据。
     * 
     * @param id
     * @throws DataAccessException
     */
    void deleteById(PK id) throws DataAccessException;

    /**
     * 插入数据。
     * 
     * @param entity
     * @throws DataAccessException
     */
    void insertEntity(E entity) throws DataAccessException;

    /**
     * 更新数据。
     * 
     * @param entity
     * @throws DataAccessException
     */
    void updateEntity(E entity) throws DataAccessException;

    /**
     * 唯一性检查。
     * 
     * @param entity
     * @param uniquePropertyNames
     * @return
     * @throws DataAccessException
     */
    boolean isUnique(E entity, String uniquePropertyNames)
            throws DataAccessException;

    /**
     * 查询所有数据。
     * 
     * @return
     * @throws DataAccessException
     */
    List<E> findAll() throws DataAccessException;

}
